package zombies;

import java.util.Random;

final public class Amigo implements Runnable{

	private static final int PROBABILIDAD_ENTRADA_ZOMBIE = 1;
	private static final int TIEMPO_DE_ACCESO_ZOMBIES = 10;
	private volatile int cantidadZombies;
	private Random random;
	private String nombre;
	private boolean permitirMasZombies = true;
	private Galpon galpon;
	
	public Amigo(String nombre, Galpon galpon){
		this.nombre = nombre;
		this.random = new Random();
		this.galpon = galpon;
	}

	@Override
	public void run() {
		try {
			jugar();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}		
	}
	
	private void jugar() throws InterruptedException {
		int p = random.nextInt(10);
		if(p < PROBABILIDAD_ENTRADA_ZOMBIE)
			dejarEntrarZombie();
		Thread.sleep(TIEMPO_DE_ACCESO_ZOMBIES);
		jugar();
	}

	private void dejarEntrarZombie() throws InterruptedException{
		if(permitirMasZombies){
			cantidadZombies++;
			galpon.incrementarCuentaZombies();
			System.out.println(nombre + ": ahi va un zombie mas");
			System.out.println(nombre + ": por aca han entrado: " + cantidadZombies + " zombies");
		}
		else
			synchronized (this) {
				wait();	
			}
			
	}

	public int getCantidadZombies() {
		return cantidadZombies;
		
	}

	public void cerrarPuerta() throws InterruptedException {
		
		if(permitirMasZombies)
			//System.out.println(nombre + ": mi puerta ya esta cerrada, por aqui no entra uno mas");
		permitirMasZombies  = false;
		
		
	}

	public void continuarMetiendoZombies() {
		synchronized (this) {
				permitirMasZombies = true;
				notifyAll();
		}		
	}
}
